HJS

🍎 가장 비싼 과일 세트 찾기

🧾 문제 설명

한 상점에는 여러 종류의 과일이 있습니다.
각 과일에는 가격이 적혀 있으며, 같은 종류의 과일이 여러 개 있을 수 있습니다.

상점 주인은 3개의 과일을 골라 합산 가격을 기록하려고 합니다.
기록된 모든 합 중에서 K번째로 높은 가격을 구하세요.
만약 K번째 가격이 존재하지 않으면 -1을 출력합니다.

📥 입력 예시

let n = 7, k = 4;
let prices = [1200, 1500, 900, 2000, 800, 1500, 1000];

📤 출력 예시

4200

📚 풀이 과정

💡 접근 방법


📝 내 풀이

function solution(n, k, prices){
    prices.sort((a, b) => b - a); // 내림차순 정렬
    let count = 0;
    let answer;

    for(let i=0; i<n-2; i++){
        for(let j=i+1; j<n-1; j++){
            for(let s=j+1; s<n; s++){
                count++; // 단순히 조합 수를 세어 K번째가 나오면 반환
                if(count === k){
                    answer = prices[i]+prices[j]+prices[s];
                    break;
                }
            }
        }
    }
    return answer;
}

❌ 문제점

  1. 중복 합 처리 실패
  1. Set 사용 없이 정렬만으로 조기 종료
  1. K번째 값이 존재하지 않을 경우 처리 없음

✅ 정답 코드

정답 보기 🔍
 
function solution(n, k, prices) {
    let sums = new Set();

for (let i = 0; i < n - 2; i++) {
    for (let j = i + 1; j < n - 1; j++) {
        for (let s = j + 1; s < n; s++) {
            sums.add(prices[i] + prices[j] + prices[s]); // 중복 제거
        }
    }
}

// Set을 Array로 변환 후 내림차순 정렬
let sorted = Array.from(sums).sort((a, b) => b - a);

// K번째 값이 존재하면 반환, 없으면 -1
return sorted[k - 1] ?? -1;




}


// 테스트 let n = 7, k = 4; let prices = [1200, 1500, 900, 2000, 800, 1500, 1000]; console.log(solution(n, k, prices));

🔹 특징


📌 마무리 회고